An dieser Stelle soll einmal demonstriert werden, wie wenig Programmierarbeit in diesem Beispielprogramm steckt. Zun„chst werden ganz zu Beginn die Listboxen mit Texten gefllt und ein selbstdefinierter Numberscroller eingerichtet: PROCEDURE user_rsc_var_init ' b&=65 FOR a&=0 TO 19 radio_lstbox_arr$(a&)=CHR$(b&)+" Radio "+STR$(a&+1) checl_lstbox_arr$(a&)=CHR$(b&)+" Check "+STR$(a&+1) menu_lstbox_arr$(a&)=CHR$(b&)+" Menu "+STR$(a&+1) LET open_listbox1_arr$(a&)="Menu "+STR$(a&+1) LET open_lstbox2_arr$(a&)="Radio "+STR$(a&+1) LET open_lstbox3_arr$(a&)="Check "+STR$(a&+1) INC b& NEXT a& ' @slidemover_set(input&,slider&,slider&,10,0,127,3,TRUE) ' RETURN Dann wird die Datei EX.TXT (das ist die Datei, die Sie gerade lesen) eingeladen. PROCEDURE user_on_open ' ' Lade Datei EX.TXT ' LOCAL num_lines&,file$ ' num_lines&=250 DIM txt$(num_lines&),txt!(num_lines&) LET file$="EX.TXT"+CHR$(0) LET fh&=GEMDOS(61,L:V:file$,0) IF fh&=>0 LET txt%=MAX(1,@fread_to_array(fh&,-1,txt$())) ELSE LET txt%=0 ENDIF ' RETURN In der von faceVALUE vorbereiteten Prozedur "user_rsc_interact" wird nun eingetragen, was beim Anw„hlen der einzelnen Dialogkn”pfe und Menpunkte passieren soll. PROCEDURE user_rsc_interact(index&,tree&,object&,mc&,sub_me&) ' SELECT tree& ' CASE buttons& SELECT object& CASE close_buttons& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE checks& SELECT object& CASE check_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE radios& SELECT object& CASE radios_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE input& SELECT object& CASE slider& a&=@slidemover(index&,slider&,slider&,0,127,3,TRUE) CASE callback& @rsc_set_text(tree&,show_callback&,callback_var$) @rsc_ob_draw(index&,show_callback&) CASE input_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE popups& SELECT object& CASE popup_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE listbxes& SELECT object& CASE lstbox_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE mstate& SELECT object& CASE mstate_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE other& SELECT object& CASE misc_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE resize_me& SELECT object& CASE resize_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE foldable& SELECT object& CASE foldable_close& @win_close(@find_handle_from_tree(tree&)) ENDSELECT ' CASE menu& SELECT object& CASE about& ~@alert_wind(1,fv_copyright&,"") CASE demo_quit& exit_program!=TRUE CASE m_buttons& ~@win_open_dialog(prg_modal_var&,buttons&,iconify_icon_1&) CASE m_status& ~@win_open_dialog(prg_modal_var&,checks&,iconify_icon_1&) CASE m_radios& ~@win_open_dialog(prg_modal_var&,radios&,iconify_icon_1&) CASE m_input& ~@win_open_dialog(prg_modal_var&,input&,iconify_icon_1&) CASE m_popups& ~@win_open_dialog(prg_modal_var&,popups&,iconify_icon_1&) CASE m_listboxes& ~@win_open_dialog(prg_modal_var&,listbxes&,iconify_icon_1&) CASE m_multistate& ~@win_open_dialog(prg_modal_var&,mstate&,iconify_icon_1&) CASE m_resize& ~@win_open_dialog(prg_modal_var&,resize_me&,iconify_icon_1&) CASE m_foldable& ~@win_open_dialog(prg_modal_var&,foldable&,iconify_icon_1&) CASE m_other& ~@win_open_dialog(prg_modal_var&,other&,iconify_icon_1&) CASE menu_ascii& ~@win_open_dialog(4,fvt_asci&,-1) CASE menu_alerts& IF @alert_wind(1,alert_1&,"")=1 ~@alert_wind(1,alert_3&,"")=1 ENDIF CASE menu_progress& @progress_open("New: Title!",-1) FOR albert&=0 TO 4000 EXIT IF @progress_update(INT(albert&/40)) NEXT albert& @progress_close CASE menu_busy& time&=@busy_open(TRUE) FOR a&=0 TO 4000 EXIT IF @busy_update(time&) NEXT a& @busy_close CASE demo_simple_win& ~@win_open(" Standard window "," Info line...",simple_window%,backgrnd&,800,800,16,16,12,0,0,800,800,iconify_icon_1&) CASE demo_hor_tlstrip& ~@win_open(" Toolstrip window ","",toolstrip_window%,toolstrip&,800,800,16,16,12,0,0,800,800,iconify_icon_1&) CASE demo_ver_toolbar& ~@win_open(" Toolbar window ","",toolbar_window%,toolbar&,800,800,16,16,12,0,0,800,800,iconify_icon_1&) CASE demo_menu_window& @open_text_window CASE iconify_all& @win_iconify_all CASE uniconify_all& @win_uniconify_all ENDSELECT ENDSELECT RETURN So einfach funktioniert die Ausgabe Fenster. Die folgende Routine wird zum Zeichnen der Fensterinhalte aufgerufen (diese Userfenster- Funktion ist nur in der faceVALUE-Vollversion verfgbar): PROCEDURE user_window_content(index&,userhandle&,off_x%,off_y%,cx&,cy&,cw&,ch&) ' ' Kreise Zeichnen ' LOCAL a& SELECT userhandle& CASE 12 FOR a&=95 TO 395 STEP 100 CIRCLE 400-off_x%,400-off_y%,a& NEXT a& ENDSELECT ' RETURN Zum Schluž mužten noch die beiden Prozeduren erstellt werden, um dem Textfenster einen Fontselektor zu verpassen: PROCEDURE open_text_window LOCAL handle&,index& !locals LET handle&=@textlist_win_open(" System font at 10 points ","",0,3,window_menu&,42,-1,-1,-1,-1,iconify_icon_1&,txt%,txt$()) IF handle&>0 !if window opened index&=@win_get_index(handle&) !find index num_fonts&=@vdi_load_fonts(window_array&(index&,22)) !load fonts ' these are the extended window_array&() entries: window_array&(index&,26)=1 !initial font id window_array&(index&,27)=10 !initial font size @textlist_resize(index&,txt%,txt$()) ENDIF RETURN PROCEDURE change_font(index&) LOCAL id&,size&,wcell&,hcell&,ret%,x&,y&,w&,h&,name$,handle&,fontflags& IF index&=-1 !if called by shortcut ~WIND_GET(0,10,handle&,d&,d&,d&) !get the top window (the window whose shortcut was used) index&=@win_get_index(handle&) !find for this window ENDIF id&=window_array&(index&,26) !find font id size&=window_array&(index&,27) !find font size ' ' 1=include systemfont ' 2=include monospaced ' 4=include proportional ' 8=include bitmap ' 240=include vector ' 254=include all fontflags&=254 !include all ' ret%=@xfsl(window_array&(index&,22),"Choose font",fontflags&,num_fonts&,name$,id&,size&,wcell&,hcell&) IF ret%=1 !if new font/size selected @win_set_title(index&," "+name$+" "+STR$(size&)+" points ") !set title of window ' then fill the extended window_array&() entries correctly: window_array&(index&,26)=id& !new font id window_array&(index&,27)=size& !new font size ' update the window: @textlist_resize(index&,txt%,txt$()) @win_send_redraw(index&,-1,-1,-1,-1) !redraw window ENDIF RETURN